//
// File: qrsolve.cpp
//
// MATLAB Coder version            : 5.4
// C/C++ source code generated on  : 23-Apr-2025 16:26:18
//

// Include Files
#include "qrsolve.h"
#include "rt_nonfinite.h"
#include "coder_array.h"
#include <string.h>

// Function Definitions
//
// Arguments    : const ::coder::array<double, 2U> &A
//                const double tau_data[]
//                const int jpvt[2]
//                ::coder::array<double, 1U> &B
//                int rankA
//                double Y[2]
// Return Type  : void
//
namespace coder {
namespace internal {
void LSQFromQR(const ::coder::array<double, 2U> &A, const double tau_data[],
               const int jpvt[2], ::coder::array<double, 1U> &B, int rankA,
               double Y[2])
{
  int m;
  int mn;
  Y[0] = 0.0;
  Y[1] = 0.0;
  m = A.size(0);
  mn = A.size(0);
  if (mn > 2) {
    mn = 2;
  }
  for (int j{0}; j < mn; j++) {
    if (tau_data[j] != 0.0) {
      double wj;
      int b_i;
      wj = B[j];
      b_i = j + 2;
      for (int i{b_i}; i <= m; i++) {
        wj += A[(i + A.size(0) * j) - 1] * B[i - 1];
      }
      wj *= tau_data[j];
      if (wj != 0.0) {
        B[j] = B[j] - wj;
        for (int i{b_i}; i <= m; i++) {
          B[i - 1] = B[i - 1] - A[(i + A.size(0) * j) - 1] * wj;
        }
      }
    }
  }
  for (int i{0}; i < rankA; i++) {
    Y[jpvt[i] - 1] = B[i];
  }
  for (int j{rankA}; j >= 1; j--) {
    m = jpvt[j - 1] - 1;
    Y[m] /= A[(j + A.size(0) * (j - 1)) - 1];
    for (int i{0}; i <= j - 2; i++) {
      Y[jpvt[0] - 1] -= Y[m] * A[A.size(0) * (j - 1)];
    }
  }
}

} // namespace internal
} // namespace coder

//
// File trailer for qrsolve.cpp
//
// [EOF]
//
